/**
 * 操作t_admin表
 */
// 引入数据源
let pool = require('../../datasource.js');

/**
 * 查询列表
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
module.exports.login = function (data) {

    return new Promise((resolve, reject) => {
        let sql = `SELECT
	a.t_admin_pk,
	a.mobile,
	a.admin_name 
FROM
	t_admin a 
WHERE
	a.mobile = ? 
	AND a.\`password\` = MD5(?)
	AND a.\`status\` = 1`;

        let params = [data.mobile, data.password];

        console.log("sql = ", sql);
        console.log("params = ", params);

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(null);
                    return;
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    })


}

/**
 * 查询管理员的模块
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
module.exports.queryModels = function (data) {

    let promise = new Promise(function (resolve, reject) {
        let sql = `SELECT DISTINCT
	m.t_fun_pk model_pk,
	m.fun_name model_name 
FROM
	t_fun f,
	t_admin_fun af,
	t_fun m 
WHERE
	f.t_fun_pk = af.t_fun_fk 
	AND f.model_fk = m.t_fun_pk 
	AND af.t_admin_fk = ?`;

        let params = [data.t_admin_pk];

        console.log("sql = ", sql);
        console.log("params = ", params);

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(null);
                    return;
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    })
    return promise;
}

/**
 * 查询管理员某个模块的所有权限
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
module.exports.queryFuns = function (data) {

    let promise = new Promise(function (resolve, reject) {
        let sql = `SELECT 
	f.t_fun_pk,
	f.fun_name,
	f.type,
	f.page_url,
	f.url
FROM
	t_fun f,
	t_admin_fun af
WHERE
	f.t_fun_pk = af.t_fun_fk 
	AND af.t_admin_fk = ?
	AND f.model_fk = ?
ORDER BY f.parent_fk`;

        let params = [data.t_admin_pk, data.model_pk];

        console.log("sql = ", sql);
        console.log("params = ", params);

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(null);
                    return;
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    });
    return promise;
}

/**
 * 查询管理员列表
 * @param {Object} data 传入参数
 */
module.exports.queryList = function (data) {

    let promise = new Promise(function (resolve, reject) {
        let sql = `SELECT 
        a.t_admin_pk,
        a.mobile,
        a.create_time,
        a.update_time,
        a.admin_name
    FROM
        t_admin a
    WHERE a.status = 1`;


        let params = [];
        sql += buildCondition(data, params);

        // 打开了分页
        if (data.paging) {
            sql += ` order by ${data.order} LIMIT ?,? `;
            params.push(data.begin);
            params.push(data.rows);
        }

        console.log("sql = ", sql);
        console.log("params = ", params);

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(null);
                    return;
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    });
    return promise;
}

/**
 * 查询管理员列表的行数
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
module.exports.queryCount = function (data) {

    let promise = new Promise(function (resolve, reject) {
        let sql = `SELECT 
       COUNT(1) c
    FROM
        t_admin a
    WHERE a.status = 1`;


        let params = [];
        sql += buildCondition(data, params);

        console.log("sql = ", sql);
        console.log("params = ", params);

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(0);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(0);
                    return;
                }

                // 3、释放连接
                connection.release();
                resolve(result[0].c);

            });
        })
    });
    return promise;
}

function buildCondition(data, params) {
    let sql = "";
    if (data.admin_name) {
        // 开发中，严禁使用拼接字符串的方式组装SQL语句，因为有SQL注入风险
        // sql += ` AND e.emp_name LIKE '%${data.emp_name}%' `;
        sql += ` AND a.admin_name LIKE CONCAT('%',?,'%') `;
        params.push(data.admin_name);
    }
    if (data.mobile) {
        sql += ` AND a.mobile LIKE CONCAT(?,'%') `;
        params.push(data.mobile);
    }
    return sql;
}

/**
 * 删除管理员
 * @param {Object} data 传入参数
 */
module.exports.delete = function (data) {

    let promise = new Promise(function (resolve, reject) {
        let sql = `UPDATE t_admin set status = -1,update_time = now() where t_admin_pk = ?`;

        let params = [data.t_admin_pk];

        console.log("sql = ", sql);
        console.log("params = ", params);

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(null);
                    return;
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    });
    return promise;
}

/**
 * 修改管理员
 * @param {Object} data 传入参数
 */
module.exports.update = function (data) {
    let params = [];

    let sql = `UPDATE t_admin set update_time = now()`
    if (data.admin_name) {
        sql += `,admin_name = ? `;
        params.push(data.admin_name)
    }
    if (data.mobile) {
        sql += `,mobile = ? `;
        params.push(data.mobile)
    }
    if (data.password) {
        sql += `,password = MD5(?) `;
        params.push(data.password)
    }
    sql += `WHERE t_admin_pk = ?`;
    params.push(data.t_admin_pk)

    console.log("sql = ", sql);
    console.log("params = ", params);

    let promise = new Promise(function (resolve, reject) {

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("修改出错：", err);
                    reject(null);
                    return;
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    });
    return promise;
}

/**
 * 增加管理员
 * @param {Object} data 传入参数
 */
module.exports.insert = function (data) {
    let params = [];

    let sql = `INSERT t_admin (admin_name,password,mobile) values (?,?,?)`

    params.push(data.admin_name)
    params.push(data.password)
    params.push(data.mobile)
    
    console.log("sql = ", sql);
    console.log("params = ", params);

    let promise = new Promise(function (resolve, reject) {

        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("修改出错：", err);
                    reject(null);
                    return;
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    });
    return promise;
}